Skip to content

Git Squash Merge 使用指南 ​

一、什么是 squash merge ​

squash merge 是 Git 中一种:

只合并代码,不合并提交历史

的合并方式。

适用于:

  • 个人开发分支
  • 临时功能分支
  • 不希望暴露开发过程
  • 不希望远程出现大量 commit
  • 想保持提交记录干净

二、为什么使用 squash merge ​

假设:

huawei 分支 ​

text
A---B

dev 分支 ​

text
A---B---C---D---E

其中:

  • C D E 是自己开发过程中的提交

如果直接:

bash
git merge dev

最终:

text
A---B--------M
     \      /
      C----D----E

远程会看到:

  • 所有开发记录
  • merge commit
  • 分支关系

提交历史会越来越乱。


三、squash merge 的效果 ​

执行:

bash
git merge --squash dev

最终:

text
A---B---X

其中:

  • X 是一个新的提交
  • C D E 不会进入远程历史

效果相当于:

把 dev 的所有代码压缩成一次提交。


四、核心特点 ​

特点squash merge
合并代码✅
合并 commit 历史❌
产生 merge commit❌
提交记录干净✅
适合个人开发✅

五、推荐开发流程 ​


1. 切换到公共分支 ​

bash
git checkout huawei

2. 拉取最新代码 ​

bash
git pull

确保本地分支最新。


3. squash 合并 dev ​

bash
git merge --squash dev

执行后:

  • 代码会进入暂存区
  • 但不会自动 commit
  • 不会生成 merge commit

4. 查看状态 ​

bash
git status

会看到:

text
Changes to be committed

说明代码已经进入暂存区。


5. 提交代码 ​

bash
git commit -m "新增xxx功能"

此时:

  • 会生成一个全新的 commit
  • 不会保留 dev 的历史记录

6. 推送远程 ​

bash
git push

远程只能看到:

text
新增xxx功能

看不到:

  • dev 分支
  • dev 的 commit
  • merge 历史

六、完整操作示例 ​


当前情况 ​

huawei ​

text
A---B

dev ​

text
A---B---C---D---E

执行 ​

bash
git checkout huawei

git pull

git merge --squash dev

git commit -m "新增用户功能"

git push

最终结果 ​

text
A---B---X

其中:

  • X 包含了 C D E 的所有代码
  • 但不会暴露开发过程

七、常见问题 ​


1. squash merge 后为什么没有自动 commit? ​

因为:

bash
git merge --squash

只会:

  • 合并代码
  • 放入暂存区

不会自动提交。

需要手动:

bash
git commit

2. squash merge 会删除 dev 分支吗? ​

不会。

只是:

  • 复制代码
  • 不影响 dev 分支

3. squash merge 后还能继续开发吗? ​

可以。

dev 分支不会受到影响。


4. squash merge 会产生 merge commit 吗? ​

不会。

这是它最大的优点之一。


八、推荐使用场景 ​

适合:

  • 个人开发分支
  • 功能开发分支
  • 实验分支
  • 临时分支
  • 提交记录需要干净的项目

九、不推荐直接 merge 的原因 ​

直接:

bash
git merge dev

会:

  • 暴露开发过程
  • 出现大量 commit
  • 出现 merge commit
  • 提交记录混乱

尤其多人协作时:

Git 图会越来越复杂。


十、推荐命令速查 ​


squash merge ​

bash
git merge --squash dev

提交代码 ​

bash
git commit -m "新增功能"

推送远程 ​

bash
git push

查看提交图 ​

bash
git log --oneline --graph

十一、最佳实践(推荐) ​

bash
# 更新公共分支
git checkout huawei
git pull

# 合并个人开发代码
git merge --squash dev

# 提交
git commit -m "新增xxx功能"

# 推送
git push

十二、总结 ​

方案是否暴露开发历史是否产生 merge commit提交记录
merge会会复杂
rebase会不会较干净
squash merge不会不会最干净

十三、结论 ​

对于:

  • 本地个人开发分支
  • 不想提交 dev 历史
  • 希望远程提交干净

最推荐:

bash
git merge --squash dev
最近更新